﻿/**
 @file CLite_Stmt.h
 @brief CLite_Stmt 헤더 파일.
*/

/**
 @class  CLite_Stmt
 @date   2012/03/01
 @author 김영욱
 @brief  데이터를 주고 받는 데이터 기능 및 Recordset 기능의 Class
*/

#pragma once

class CLite_Dbc;
class CLite_Stmt
{
public:
	CLite_Stmt(const int nMyIndex, CLite_Dbc * pDbc,PACKET_STRT *  pPack); ///< 기본 생성자.
	~CLite_Stmt();                               ///< 기본 소멸자.
public:
	BOOL IsUsed();                          ///< 사용유무 플래그 함수.
	void SetUsed();                         ///< 현재 사용을 한다는 플래그.
	void CloseStmt();                       ///< Stmt를 닫는 함수.
	BOOL Prepare(const char * pszSQL);      ///< Prepare 함수.
	
	short GetFieldCount();                  ///< Query된 컬럼의 숫자를 얻는다.
	void  GetColumnInfo(const short nIndex,COLUMN_INFO * pColumn); ///< 컬럼의 정보를 얻는다.
	const char * GetColName(const short nIndex);               ///< 컬럼의 이름을 얻는다.

	BOOL  Step();                            ///< 다음 레코드로 이동.
	const char * GetValue();                ///< 다음 Field Value로 얻는다.
	const char * GetValueBuf();               ///< 다음 Field Value + Type
	void  FetchProcess();                    ///< Fetch를 하는 프로세스.
		
	void SetErr(const char * pErr); ///< 에러 메시지 설정 함수.
	const char * GetErr();          ///< 에러 문자열 리턴.
	
private:
	int   m_nMyIndex;  ///< 자신의 인덱스.
	CLite_Dbc *m_pDbc;      ///< 연결 객체 포인터 변수.
	PACKET_STRT * m_pPack; ///< DBC의 PACKET포인터.
	BOOL  m_bUse;      ///< 현재 사용되고 있는지 아닌지를 판단.
	char   m_szErr[50];    ///< 에러 메시지.
	//==================================================
	// 통신에 대한 변수들.
	//==================================================
	int					m_nRecCount;        ///< 레코드 카운트.
	int					m_nColCount;        ///< 컬럼 카운트.
		
	PACKET_STRT         m_fetchPack;        ///< 실제로 데이터를 Fetch 했을때의 임시 패킷 임시 저장 장소.
	int					m_nfetchPos;        ///< 데이터를 해석한 패킷에서의 크기.
	BOOL				m_bIsEnd;           ///< 끝인가 아닌가를 판명.
	BOOL				m_bFetchStatEnd;    ///< Fetch 상태가 끝인가 아닌가를 판명.
	int                 m_nGetValIdx;        ///< Value 인덱스.
	char                m_szValue[4097];
};

